/*
 * MsjEmisor.h
 *
 *  Created on: 09/01/2010
 *      Author: San Martín, Matías I.
 */

#ifndef MSJEMISOR_H_
#define MSJEMISOR_H_

#include <cstring>

#include "../Common/IdPlaneta.h"
#include "../Common/IdJuego.h"
#include "../Common/Mensaje.h"
#include "../Comunicaciones/MiddlewareCliente.h"
#include "../Comunicaciones/MiddlewareIO.h"

class MsjEmisor {
//------------------------------ CONSTANTES ------------------------------
public:
//------------------------------ ATRIBUTOS ------------------------------
private:
	MiddlewareIO* _emisor;

//------------------------------ METODOS ------------------------------
public:
	/**
	 * MiddlewareCliente debe estar creado (singleton) e inicializado (start)
	 */
	MsjEmisor();
	virtual ~MsjEmisor();

	/**
	 * throws InicializacionExcepcion
	 */
	void inicializar(MiddlewareIO* emisor);

	/*
	 * Crea una copia del mensaje pasado
	 *
	 * idPlaneta (in): identificador del planeta al cual se quiere enviar el mensaje
	 * mensaje (in): mensaje que se quiere enviar
	 * return     0 si se envió el mensaje correctamente
	 *         -1 si hubo algún error
	 */
	virtual int enviar(const IdPlaneta& idPlaneta, const middleware::Mensaje& mensaje);

	/*
	 * Crea una copia del mensaje pasado
	 *
	 * idJuego (in): identificador del grupo de jugadores al cual se quiere enviar el mensaje
	 * mensaje (in): mensaje que se quiere enviar
	 * return     0 si se envió el mensaje correctamente
	 *         -1 si hubo algún error
	 */
	virtual int enviar(const IdJuego& idJuego, const middleware::Mensaje& mensaje);

private:

	int enviar(const Direccion& destino,const middleware::Mensaje& mensaje);

};

#endif /* MSJEMISOR_H_ */
